<?php
/**
 * Copyright (c) 2010, Slawomir Mazur <mazursllawek@gmail.com>
 * 
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions 
 * are met:
 * 
 * o Redistributions of source code must retain the above copyright notice, 
 *   this list of conditions and the following disclaimer.
 * o Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation
 *   and/or other materials provided with the distribution.
 * o Neither the name of the Softisland nor the names of its contributors
 *   may be used to endorse or promote products derived from this software
 *   without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
/**
 * Enter description here...
 *
 * @package     Library
 * @copyright   Slawomir Mazur (c) 2010 (http://www.zend.com/zce.php?c=ZEND011643)
 * @license     http://www.opensource.org/licenses/bsd-license.php
 * @author      Slawomir Mazur <mazursllawek@gmail.com>
 */

require_once APPLICATION_PATH . '/modules/system/models/History.php';

class Gp_Cache_Manager
{
	const FILE_CACHE = 'file_cache';
		
	public static function save($id, $data, $tags = array()) 
	{
		if (self::cacheExists()) {
			return self::getFileCacheObject()->save($data, $id, $tags, null);
		}
	}
	
	public static function load($id) 
	{
		if (self::cacheExists()) {
			return self::getFileCacheObject()->load($id);
		}
	}
	
	public static function remove($id) 
	{
		if (self::cacheExists()) {
			return self::getFileCacheObject()->remove($id);
		}
	}
	
	/**
	 * Page cache object
	 * 
	 * @return Zend_Cache_Frontend_Page
	 */
	public static function getPageCacheObject() 
	{
		$frontendOptions = array(
   			'lifetime' => null,
   			'debug_header' => false, // for debugging
			'default_options' => array(
				'tags' => array(System_Model_History::CACHE_TAGS)
			),
   			'regexps' => array(
		       '/index/result' => array(
		       		'cache' => true,
		           	// and we cache even there are some variables in $_POST
           			'cache_with_post_variables' => true,
 
		           	// but the cache will be dependent on the $_POST array
					'make_id_with_post_variables' => true,
		
					// hack for cookies and session
					'cache_with_cookie_variables' => true,		
					//'make_id_with_cookie_variables' => false
					
					'cache_with_session_variables' => true,
					'make_id_with_session_variables' => false,
				),
		       '/index/library-history' => array(
		       		'cache' => true,
		           	// and we cache even there are some variables in $_GET
           			'cache_with_get_variables' => true,
 
		           	// but the cache will be dependent on the $_GET array
					'make_id_with_get_variables' => true,
				
					// hack for cookies and session
					'cache_with_cookie_variables' => true,
					//'make_id_with_cookie_variables' => false
					
					'cache_with_session_variables' => true,
					'make_id_with_session_variables' => false,
				)				
			)
		);
 
		$backendOptions = array(
		    'cache_dir' => APPLICATION_PATH . '/../public/var/cache'
		);
 
		// getting a Zend_Cache_Frontend_Page object
		$cache = Zend_Cache::factory('Page',
		                             'File',
		                             $frontendOptions,
		                             $backendOptions);
		return $cache;
	}
	
	/**
	 * Get cache object
	 * 
	 * @return Zend_Cache_Core
	 */
	public static function getFileCacheObject() 
	{
		return Zend_Registry::get(self::FILE_CACHE);
	}
	
	/**
	 * Check whether cache object was registered and exists
	 * 
	 * @param unknown_type $id
	 */
	public static function cacheExists()
	{
		return Zend_Registry::isRegistered(self::FILE_CACHE);
	}
}